const axios = require('axios');
const path = require("path");
const fs = require("fs");
const moment = require("moment");

// 获取token的值
const getToken = (params) => {
  return new Promise((resolve, reject) => {
    const tokenFile = path.join(__dirname, "token.json");
    // 先看一下token.json文件中token的值有没有过期，没有则直接返回token的值
    fs.readFile(tokenFile, "utf-8", function (err, data) {
      if (err) {
        reject(err);
        return;
      }
      if (data) {
        
        const token = JSON.parse(data);
        // moment().unix()为当前时间戳
        if (token.expires_in > moment().unix()) {
          resolve(token.access_token);
          return;
        }
      }

      // 发送请求获取token值
      axios
        .get(
          `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${params.appID}&secret=${params.appsecret}`
        )
        .then((res) => {
          if (res.data && res.data.errcode) {
            reject(data);
            return;
          }
          // 返回token值
          resolve(res.data.access_token);

          const t = res.data;
          // 设置凭证的有效时间（expires_in为事件戳，设置凭证的有效时间为1小时40分钟）
          t.expires_in = t.expires_in + moment().unix() - 1200;
          // 将获取到的token值和凭证的有效时间写入文件中
          fs.writeFile(tokenFile, JSON.stringify(t), function (err) {
            if (err) {
              reject(err);
            }
          });
        });
    });
  });
};

module.exports = getToken;
